/**
 * 文件路径处理工具函数
 */

// 操作系统非法字符映射
const INVALID_CHARS_MAP: Record<string, string> = {
    '/': '／',
    '\\': '＼',
    ':': '：',
    '*': '＊',
    '?': '？',
    '"': '＂',
    '<': '＜',
    '>': '＞',
    '|': '｜'
};

/**
 * 清理文件名，替换非法字符
 * @param filename 原始文件名
 * @returns 清理后的文件名
 */
export function sanitizeFilename(filename: string): string {
    if (!filename) return 'unnamed';

    // 替换已知的非法字符
    let sanitized = filename;
    for (const [invalid, replacement] of Object.entries(INVALID_CHARS_MAP)) {
        sanitized = sanitized.replace(new RegExp(invalid, 'g'), replacement);
    }

    // 去除前后空格
    sanitized = sanitized.trim();

    // 如果文件名为空，使用默认名称
    if (!sanitized) return 'unnamed';

    return sanitized;
}

/**
 * 从路径获取文件名
 * @param path 文件路径
 * @returns 文件名
 */
export function getFilenameFromPath(path: string): string {
    if (!path) return '';

    // 处理不同系统的路径分隔符
    const parts = path.split(/[/\\]/);
    return parts[parts.length - 1] || '';
}

/**
 * 获取文件扩展名
 * @param filename 文件名
 * @returns 扩展名（不含点）
 */
export function getFileExtension(filename: string): string {
    if (!filename) return '';

    const parts = filename.split('.');
    return parts.length > 1 ? parts[parts.length - 1] : '';
}

/**
 * 添加扩展名（如果没有）
 * @param filename 文件名
 * @param extension 扩展名（不含点）
 * @returns 添加扩展名后的文件名
 */
export function ensureExtension(filename: string, extension: string): string {
    if (!filename) return `unnamed.${extension}`;

    // 如果已有扩展名，检查是否匹配
    const existingExt = getFileExtension(filename);
    if (existingExt && existingExt.toLowerCase() === extension.toLowerCase()) {
        return filename;
    }

    // 添加扩展名
    return `${filename}.${extension}`;
}

/**
 * 获取路径的父目录
 * @param path 文件路径
 * @returns 父目录路径
 */
export function getParentDirectory(path: string): string {
    if (!path) return '';

    // 处理路径结尾的斜杠
    const normalizedPath = path.endsWith('/') || path.endsWith('\\')
        ? path.slice(0, -1)
        : path;

    // 查找最后一个斜杠位置
    const lastSlash = Math.max(
        normalizedPath.lastIndexOf('/'),
        normalizedPath.lastIndexOf('\\')
    );

    if (lastSlash === -1) return '';
    return normalizedPath.substring(0, lastSlash);
} 